accessible_role: Atk.Role.MENU });
this.actor.connect('event', Lang.bind(this, this._onEvent));
- this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
this.actor.connect('notify::visible', Lang.bind(this, this._onVisibilityChanged));
if (dontCreateMenu)
return Clutter.EVENT_PROPAGATE;
},
- _onSourceKeyPress: function(actor, event) {
- if (!this.menu)
- return Clutter.EVENT_PROPAGATE;
-
- let symbol = event.get_key_symbol();
- if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
- this.menu.toggle();
- return Clutter.EVENT_STOP;
- } else if (symbol == Clutter.KEY_Escape && this.menu.isOpen) {
- this.menu.close();
- return Clutter.EVENT_STOP;
- } else if (symbol == Clutter.KEY_Down) {
- if (!this.menu.isOpen)
- this.menu.toggle();
- this.menu.actor.navigate_focus(this.actor, Gtk.DirectionType.DOWN, false);
- return Clutter.EVENT_STOP;
- } else
- return Clutter.EVENT_PROPAGATE;
- },
-
_onVisibilityChanged: function() {
if (!this.menu)
return;
global.focus_manager.add_group(this.actor);
this.actor.reactive = true;
+ if (this.sourceActor)
+ this._keyPressId = this.sourceActor.connect('key-press-event',
+ Lang.bind(this, this._onKeyPress));
+
this._openedSubMenu = null;
},
this._openedSubMenu = submenu;
},
+ _onKeyPress: function(actor, event) {
+ let symbol = event.get_key_symbol();
+ if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
+ this.toggle();
+ return Clutter.EVENT_STOP;
+ } else if (symbol == Clutter.KEY_Escape && this.isOpen) {
+ this.close();
+ return Clutter.EVENT_STOP;
+ } else if (symbol == Clutter.KEY_Down) {
+ if (!this.isOpen)
+ this.toggle();
+ this.actor.navigate_focus(actor, Gtk.DirectionType.DOWN, false);
+ return Clutter.EVENT_STOP;
+ } else
+ return Clutter.EVENT_PROPAGATE;
+ },
+
+
setArrowOrigin: function(origin) {
this._boxPointer.setArrowOrigin(origin);
},
this.isOpen = false;
this.emit('open-state-changed', false);
+ },
+
+ destroy: function() {
+ if (this._keyPressId)
+ this.sourceActor.disconnect(this._keyPressId);
+ this.parent();
}
});